In communications systems channel coders are used for coding the data bits to be transmitted to a corresponding receiver. By the channel coding, redundant bits are added to the actual data bits enabling more reliable detection of the data bits in the receiver. With regard to channel coding the use of so-called turbo coders is known, the turbo coders being provided for example for the Universal Mobile Telecommunication System (UMTS).
The data bits are supplied to the turbo coder block wise. Each data block supplied to the turbo coder must have a corresponding size, i.e. a corresponding number of data bits. All admissible block sizes for turbo codes are multiples of a pre-determined size (e.g. 8 or 64 bit), up to a maximum size. If the data blocks supplied to the turbo coder have a block size that is smaller than the minimum block size, the length of the data blocks must be correspondingly adapted before the data blocks are supplied to the turbo coder. One such adaptation mechanism is zero padding, which is also known from the related art in UMTS.
Bit sequences that are to be turbo-encoded which are larger than the turbo coder can handle must be segmented into blocks that the coder can process. These blocks usually have a size being defined by an integer multiple of the minimal block size, and up to the maximum block size of the turbo coder. However, the sizes of segmented blocks can also be selected from a set of pre-determined admissible block sizes. The set of admissible block sizes does not necessarily contain only (or all possible) integer multiples of a minimum block size up to the maximum block size. It is to be noted that it is not required that all blocks have the same size. In many situations it can even be more advantageous to use different block sizes, e.g. to reduce the needed zero padding and thus the additional overhead.
In order to adapt the bit sequences to be turbo coded to the minimum required length M that can be constructed by a sum of blocks having sizes being integer multiples of the minimal block size, the data bits of each bit sequence can be filled up with predefined bits (“dummy bits”), for example having the value “0”. The insertion of the dummy bits into the data blocks is also referred to as “padding”.
However, the filling of the individual bit sequences with dummy bits at the end is disadvantageous insofar as non-constant data bits are generated as a result thereof in the event of resetting or termination of the turbo coder, which data bits either cannot be utilized or increase the complexity of the receiver.
US 2003/0014715 Al suggests that padding bits for turbo coders should be filled in at the beginning, not the end of data blocks/bit sequences. This however requires shifting a possibly large number of bits to the end of the data blocks to free space for filling in the padding bits at the beginning of the data block. While this approach is straightforward and can easily be carried out, it involves shifting a large number (e.g. thousands) of bits, which is disadvantageous with regard to power consumption and processing time. This problem occurs when considering octet aligned operations, which are commonly used in data processing applications.
The publication “Code Block Segmentation for LTE Channel Encoding”, TDOC R1-071059 of 3GPP TSG RAN WG 1 Meeting #48, Feb. 12-16, 2007, page 1-5, St. Louis, USA proposes a modification to former code block segmentation, wherein instead of using one interleaver size for all segments of a transport block, two adjacent interleaver sizes may be used to minimize the number of filler bits for a given transport block. The filler bits are applied to at most one segment irrespective of the transport block size.
The document U.S. Pat. No. 6,437,711 B1 discloses a segmentation mechanism for a block encoder and a method for encoding with a block encoder. The block encoder is capable of processing consecutive coding blocks whose size has an upper limit which is smaller than the size of the input data block. The method comprises (a) determining the length of the input data block before encoding any of its data with the block encoder, (b) dividing the input data block to a plurality of segments wherein all segments are of substantially equal size and no segment is larger than the upper limit and (c) processing each segment with the block encoder. If the last segment is shorter than the remaining segments, fill bits can be added to the last segment such that its length equals that of the remaining segments.
Furthermore, the related art methods of segmentation of large bit sequences into blocks suitable for a turbo coder arrange larger blocks or segments first, and smaller segments last. Then the first segments are padded. This results in deteriorated performance of the last block with respect to error rates. For convolution codes the error probability increases with block size because there are more bits that can be decoded erroneously. Only for turbo codes this is offset because turbo codes work better and better with increasing block size. With turbo coders larger blocks perform better with respect to error rate, and padding further increases the error rate performance, due to the added redundancy. Note that the error rate performance is also increased if the padded bits and possibly also corresponding parity bits are later on removed again in subsequent processing steps, as is explained already in the previously mentioned US application.
Therefore the related art way of performing the segmentation and padding creates a double penalty for the last block. The last block performs poorer already due to its reduced length, compared with the larger blocks before it, and also it does not benefit from the increased redundancy from padding, as only the large blocks are padded.